﻿using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Recomendaciones.Entidades;
using Recomendaciones.AccesoADatos;

/// <summary>
/// Descripción breve de ItemServices
/// </summary>
public class ItemServices
{
    Ado _ado;

    #region Constructor y Destructor
    public ItemServices()
    {
        _ado = new Ado();
    }

    ~ItemServices()
    {
        _ado = null;
    }
    #endregion

    /// <summary>
    /// Busqueda de Items por Nombre
    /// </summary>
    /// <param name="titulo"></param>
    /// <param name="startRecord"></param>
    /// <param name="endRecord"></param>
    /// <returns>Retorna 2 valores en un objeto ParDatos (DatoUno: Items, DatoDos: Total de Registros)</returns>

    public ParDatos BusquedaPorCategoria(string item, string categoria, string nombre, int puntajeDesde, int puntajeHasta, int usuario, int startRecord, int endRecord)
    {
        try
        {
            ArrayList parametros = new ArrayList(8);
            parametros.Add(item);
            parametros.Add(categoria);
            parametros.Add(nombre);
            parametros.Add(puntajeDesde);
            parametros.Add(puntajeHasta);
            parametros.Add(usuario);
            parametros.Add(startRecord);
            parametros.Add(endRecord);

            _ado.EjecutarStoredProcedure(false, "Busqueda_PorCategoria", parametros);
            DataSet ds = _ado.DevolverDatos();
            DataTable items = ds.Tables[0];

            ParDatos resultado = new ParDatos();
            resultado.DatoUno = (List<Item>)CollectionHelper.ConvertTo<Item>(items);
            resultado.DatoDos = Convert.ToInt32(ds.Tables[1].Rows[0]["cantidadTotal"]);

            return resultado;
        }
        catch (Exception ex)
        {
            LogErrorServices logErrorService = new LogErrorServices();
            logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
            return null;
        }
    }

    public ParDatos BusquedaPorNombre(string titulo, int startRecord, int endRecord)
    {
        try
        {
            ArrayList parametros = new ArrayList(3);
            parametros.Add(titulo);
            parametros.Add(startRecord);
            parametros.Add(endRecord);
            _ado.EjecutarStoredProcedure(false, "Busqueda_PorNombre", parametros);
            DataSet ds = _ado.DevolverDatos();
            DataTable items = ds.Tables[0];

            ParDatos resultado = new ParDatos();
            resultado.DatoUno = (List<Item>)CollectionHelper.ConvertTo<Item>(items);
            resultado.DatoDos = Convert.ToInt32(ds.Tables[1].Rows[0]["cantidadTotal"]);

            return resultado;
        }
        catch (Exception ex)
        {
            LogErrorServices logErrorService = new LogErrorServices();
            logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
            return null;
        }
    }


    public List<ComentarioItem> ConsultarUltimaActividad(int usuario_id)
    {
        try
        {
            ArrayList parametros = new ArrayList(1);
            parametros.Add(usuario_id);
            _ado.EjecutarStoredProcedureDataReader("Usuario_UltimaActividad", parametros);
            DataTable comentarioItems = _ado.DevolverDatosRapido();

            return (List<ComentarioItem>)CollectionHelper.ConvertTo<ComentarioItem>(comentarioItems);
        }
        catch (Exception ex)
        {
            LogErrorServices logErrorService = new LogErrorServices();
            logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
            return null;
        }
    }

}
